To define a resource inside of an engine, use the following technique:

``` ruby
# lib/my_engine/admin/articles.rb
if defined?(ActiveAdmin)
  ActiveAdmin.register Article do
    # customize your resource here
  end
end
```

Note that it is **very important** to keep the `admin/*.rb` definitions out of the Rails' eager load paths to *avoid loading these files more than once*. If they get loaded multiple times, you are likely to experience weird problems with duplicated filters in the filter forms, duplicate `action_item` buttons, broken `belongs_to` definitions, etc. And that will happen **only** in production (ie. when `config.cache_classes = true`).

For example, your engine's `lib/` folder is a good choice in contrast to its `app/` folder (if any). That's because `app/` is in the eager load paths and all `*.rb` files there get recursively loaded by Rails when `config.cache_classes = true` (usually the case in production environments). However, ActiveAdmin takes care to load these files too and that will be the reason for them to get loaded more than once.

``` ruby
module MyEngine
  class Engine < ::Rails::Engine
    isolate_namespace MyEngine

    initializer :my_engine do
      ActiveAdmin.application.load_paths += Dir[File.dirname(__FILE__) + '/my_engine/admin']
    end
  end
end
```

The previous code will append your engine's resources to ActiveAdmin's load path. This forces ActiveAdmin to load your resources last, which will not allow them to be overwritten in the main application, but allows the engine creator to keep control over the resource. If you would like to allow the end user to be able to overwrite the resources in the main application, the following code will prepend your engine's resources to ActiveAdmin's load path and allow your resources to be overwritten by the main application. After placing this code in your engine.rb file, simple create the same resource in the main application and customize.

``` ruby
module MyEngine
  class Engine < ::Rails::Engine
    isolate_namespace MyEngine

    initializer :my_engine do
      ActiveAdmin.application.load_paths.unshift Dir[File.dirname(__FILE__) + '/my_engine/admin']
    end
  end
end
```
